<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>简单的状态管理</title>
</head>

<body>
    <div id="app">
        <h2>
            实现一个最最最基本的状态管理模式，所有的数据由父组件进行管理，并通过父组件层层下传，所有子组件共享父组件的数据
            这种范式非常简单，但在组件树非常深的时候，容易遇到很多问题，并不是一种良好的状态管理范式
        </h2>
        <div>
            <son-comp :count="count"></son-comp>
            <son-comp :count="count"></son-comp>
            <son-comp :count="count"></son-comp>
            <button @click="count++">数据会+1</button>
        </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        // 父组件
        new Vue({
            el: "#app",
            data() {
                return {
                    count: 0 // 数据由父组件持有并统一通过props层层下传管理
                };
            },
            // 子组件
            components: {
                'son-comp': {
                    props: ['count'],
                    template: `
                    <div>
                        <h3>这里是子组件，持有数据 {{ count }}</h3>
                        <grandson-comp :count = "count"></grandson-comp>
                    </div>
                    `,
                    // 孙组件
                    components: {
                        'grandson-comp': {
                            name: "grandson-comp",
                            functional: true,
                            props: ['count'],
                            render(h, ctx) {
                                return h('h4', '这里是孙组件，持有数据 ' + ctx.props.count);
                            },
                        }
                    }
                },
            }
        });
    </script>
</body>

</html>